package com.servitware.cardio.dokstat.transport.sabino;

import java.util.ArrayList;
import java.util.List;

import com.servitware.cardio.domain.Vendedor;
import com.servitware.cardio.domain.transport.ClienteTx;
import com.servitware.cardio.domain.transport.SesionTx;
import com.servitware.cardio.domain.transport.SolicitudTx;
import com.servitware.core.id.base.InvalidIdException;
import com.servitware.core.id.base.InvalidNameException;
import com.servitware.crm.Domicilio;
import com.servitware.util.DateUtil;

public class AdapterSolicitud
{
	/**
	 * Adapta lista de SolicitudSabino a lista de SolicitudTx
	 * 
	 * @param lst
	 * 		Lista de solicitudes Sabino
	 * 
	 * @return
	 * 		Lista de SolicitudTx
	 */
	public static List<SolicitudTx> getListaSolicitudFromListaSesionSabino(List<SabinoSolicitud> lst)
	{
		if( (lst == null) || (lst.size()<1) )
			return null;
		
		List<SolicitudTx> lstTx = new ArrayList<SolicitudTx>();
		
		for( SabinoSolicitud ss: lst )
		{
			if( ss != null )
				try
				{
					lstTx.add( AdapterSolicitud.getSolicitudFromSesionSabino(ss) );
				}
				catch (InvalidNameException | InvalidIdException e)
				{
					// 
				}
		}
		
		return lstTx;
	}
	
	public static Integer getInteger(String s)
	{
		if( s == null )
			return new Integer(0);
		
		if( s.trim().length() < 1 )
			return new Integer(0);
		
		
		StringBuilder sb =new StringBuilder();
		for( int i = 0; i < s.length(); i++ )
		{
			if( Character.isDigit(s.charAt(i)) )
				sb.append( s.charAt(i) );
		}
		
		Integer integer = null;
		try
		{
			integer = new Integer( sb.toString() );
		}
		catch(NumberFormatException e)
		{
			integer = new Integer( 0);
		}
		
		return integer;
				
	}
	

	public static String getExtensionNombreArchivo(String s)
	{
		int dotPos = s.lastIndexOf('.');
		return s.substring(dotPos);
	}
	
	/**
	 * Adapta SolicitudSabino a SOlicitudTx
	 * 
	 * @param sst
	 * 		instancia de SolicitudSabino
	 * 
	 * @return
	 * 		instancia de SolicitudTx
	 * 	
	 * @throws InvalidNameException
	 * @throws InvalidIdException
	 */
	private static SolicitudTx getSolicitudFromSesionSabino(SabinoSolicitud sst) throws InvalidNameException, InvalidIdException
	{
		
		/*
		 * Cliente
		 */
		ClienteTx clt = new ClienteTx( sst.getCliente_id(), sst.getCliente_name() );		
		clt.setPeso( getInteger( sst.getCliente_peso() ) );
		clt.setEstatura( getInteger( sst.getCliente_altura() ) );
		clt.setSexo(sst.getCliente_sexo());
		clt.setFechaNacimiento(sst.getCliente_fec_nac());
		
		
			/*
			 * nuestro modelo de domicilio
			 */
			Domicilio dom = new Domicilio();
			//dom.setCalle( sst.getCliente_address1() );
			dom.setCiudad( sst.getCliente_city() );
			//dom.setCodigoPostal( sst.getCliente_postal_code() );
			
		//clt.setDomicilio( dom );
		clt.setAntecedentes( sst.getCliente_aboutme() );
		
		
		
		
		Vendedor vendedor = new Vendedor();
		vendedor.setId(sst.getVendedor_id());
		vendedor.setName(sst.getVendedor_name());
		
		/*
		 * Creamos sesion
		 */
		SesionTx ssn = new SesionTx( sst.getSesion_id() );
		ssn.setArchivo( getExtensionNombreArchivo( sst.getSesion_nom_fichero() ) );
		ssn.setCheckSum(sst.getSesion_md5_fichero() );
		ssn.setDuracion(Integer.valueOf(sst.getSesion_duracion()));
		ssn.setObservaciones(sst.getSesion_observaciones());
		//ssn.setHoraInicio(sst.getSesion_hora_inicio());
		
		
		/*
		 * procesamos las fechas que vienen en formato YYYY-MM-DD HH:MM:SS
		 */
		DateUtil dUtil = new DateUtil();
		ssn.setMomentoAlgido( dUtil.getDateFromStringYYYYMMDD_HHMMSS( sst.getSesion_momento_algido() ) );
		ssn.setFecha( dUtil.getDateFromStringYYYYMMDD_HHMMSS(sst.getSesion_fecha() ) );
		
		/*
		 * Creamos Solicitud
		 */
		SolicitudTx s = new SolicitudTx( sst.getSesion_id() );
		
		s.setClienteTx(clt);
		s.setSesionTx(ssn);
		s.setCentro(sst.getComercial_name() );
		s.setVendedor(vendedor);
		
		boolean usarViaPostal = (sst.getEnviar_correo_ordinario().equals(new Character('s')) || sst.getEnviar_correo_ordinario().equals(new Character('S')) );
		s.setEnviarInformeCorreoPostal( usarViaPostal );
		
		return s;
	}
	

}
